//上传更换参数
import { UploadFile, UploadFiles, UploadRequestOptions } from "element-plus";

export interface formUploadProps {
  /**
   * 上传的地址
   */
  action: string;
  /**
   * 上传文件类型
   * 可选值: 'image'（图片上传），'file'（文件上传）
   */
  uploadType: "image" | "file";
  /**
   * 设置上传的请求头部
   */
  headers?: object;
  /**
   * 是否支持多选文件
   */
  multiple?: boolean;
  /**
   * 上传时附带的额外参数
   */
  data?: object;
  /**
   * 上传的文件字段名
   */
  name?: string;
  /**
   * 支持发送 cookie 凭证信息
   */
  withCredentials?: boolean;
  /**
   * 是否显示已上传文件列表
   */
  showFileList?: boolean;
  /**
   * 是否启用拖拽上传
   */
  drag?: boolean;
  /**
   * 接受上传的文件类型（thumbnail-mode 模式下此参数无效）
   */
  accept?: string;
  /**
   * 点击文件列表中已上传的文件时的钩子
   */
  onPreview?: (file: any) => void;
  /**
   * 文件列表移除文件时的钩子
   */
  onRemove?: (file: any, fileList: any[]) => void;
  /**
   * 文件上传成功时的钩子
   */
  onSuccess?: (response: any, uploadFile: UploadFile, uploadFiles: UploadFiles) => void;
  /**
   * 文件上传失败时的钩子
   */
  onError?: (err: any, file: any, fileList: any[]) => void;
  /**
   * 文件上传时的钩子
   */
  onProgress?: (event: any, file: any, fileList: any[]) => void;
  /**
   * 文件状态改变时的钩子，添加文件、上传成功和上传失败时都会被调用
   */
  onChange?: (file: any, fileList: any[]) => void;
  /**
   * 上传文件之前的钩子，参数为上传的文件，
   * 若返回 false 或者返回 Promise 且被 reject，则停止上传。
   */
  beforeUpload?: (file: any) => boolean | Promise<any>;
  /**
   * 删除文件之前的钩子，参数为上传的文件和文件列表，
   * 若返回 false 或者返回 Promise 且被 reject，则停止上传。
   */
  beforeRemove?: (file: any, fileList: any[]) => boolean | Promise<any>;
  /**
   * 文件列表的类型
   */
  listType?: "text" | "picture" | "picture-card";
  /**
   * 是否在选取文件后立即进行上传
   */
  autoUpload?: boolean;
  /**
   * 上传的文件列表, 例如: [{name: 'food.jpg', url: 'https://xxx.cdn.com/xxx.jpg'}]
   */
  fileList?: { name: string; url: string }[];
  /**
   * 覆盖默认的上传行为，可以自定义上传的实现
   */
  httpRequest?: (options: UploadRequestOptions) => XMLHttpRequest | Promise<unknown>;
  /**
   * 是否禁用
   */
  disabled?: boolean;
  /**
   * 最大允许上传个数
   */
  limit?: number;
  /**
   * 文件超出个数限制时的钩子
   */
  onExceed?: (files: any[], fileList: any[]) => void;
  /**
   * 图片预览弹出框标题文字
   */
  modalTitle?: string;
}
